#ifndef FUNCTIONS_H
#define FUNCTIONS_H

#include <stdio.h>
#include <stdlib.h>
#include "structs.h"

void pause(){
  printf("\nPressione enter para continuar...");
  getchar();getchar();
  printf("\n\n");
}

void clear_screen(){
#if defined (__GNUC__)
    system("clear");
#else
    system("cls");
#endif
}

void insere_nos(apontador *raiz) {
  Item x;
  while (1) {
    printf("Informe um item a ser inserido, -1 para encerrar:\n");
    scanf("%d", &x.chave);
    if (x.chave == -1)
       break;

    insere(x, raiz);
  }
}

void consulta(apontador raiz){
  Item valor;
  printf("Informe um item a ser consultado:\n");
  scanf("%d", &valor.chave);
  if(pesquisa(valor,raiz) == 1)
    printf("Valor encontrado na arvore!\n");
  else
    printf("Valor nao encontrado na arvore!\n");
  pause();
}

void caminhamentos(apontador raiz, int opcao) {
  switch (opcao) {
    case 3: {
      printf("Caminhamento pre-ordem, ou pre-fixado (R E D):\n");
      pre_ordem(raiz);
      break;
    }
    case 4: {
      printf("Caminhamento central (em-ordem), ou infixado (E R D):\n");
      em_ordem(raiz);
      break;
    }
    case 5: {
      printf("Caminhamento pos_ordem, ou pos_fixado (E D R):\n");
      pos_ordem(raiz);
    }
  }
  pause();
}

void remover_nos(apontador *raiz) {
  Item x;
  int operacao;
  while (1) {
    printf("Informe um item a ser removido, -1 para encerrar:\n");
    scanf("%d", &x.chave);
    if (x.chave == -1)
       break;

    retira(x, raiz, &operacao);

    if (operacao == 1)
       printf("\nItem removido com sucesso !!!\n");
    else printf("\nErro: Registro nao encontrado.\n");
  }
}

void esvazia_arvore(apontador *raiz){
  char op;
  while(1){
    printf("Tem certeza que deseja esvaziar a arvore? [S/N]\n");
    printf("_>");
    scanf("%c",&op);
    if( op == 'S' || op == 's'){
      esvazia(raiz);
      printf("Arvore esvaziada com sucesso.\n");
      pause();
      break;
    }
    else if( op == 'N' || op == 'n'){
      break;
    }
    printf("\n");
    clear_screen();
  }
}

#endif //FUNCTIONS_H
